package com.example.administrator.basedemos.activity;

import com.example.administrator.basedemos.R;
import com.example.administrator.basedemos.base.BaseActivity;
import com.example.administrator.basedemos.dagger2.Component.DaggerFComponent;
import com.example.administrator.basedemos.utils.LogUtil;
import com.google.gson.Gson;

import javax.inject.Inject;
import javax.inject.Provider;

import dagger.Lazy;
import okhttp3.OkHttpClient;

/**
 * 创建者     ZCL
 * 创建时间   2018/3/26 15:34
 * 描述	      ${使用subcomponent  你想让两个 Component 都独立，没有任何关联.
 * 你想很明确的告诉别人我这个 Component 所依赖的 Component.
 * 你想让两个 Component 内聚.你应该并不关心这个 Component 依赖哪个 Component.
 * }
 * <p>
 * 更新者     $Author$
 * 更新时间   $Date$
 * 更新描述   ${TODO}
 */

public class SubComponentActivity extends BaseActivity{
private static final String TAG = "Dagger2";
    @Inject
    Lazy<Gson >             lazyGson;

    @Inject
    Provider<OkHttpClient > lazyOkHttpClient;

    @Override
    public void initView() {

    }

    @Override
    public void initData() {
        DaggerFComponent.builder().build().getChildrenComponent().inject(this);
        LogUtil.util(TAG,"mgson:"+lazyGson);

        //这时候才创建对象  每次创建都会得到同一个对象
        Gson gson = lazyGson.get();

        LogUtil.util(TAG,"mgson:"+gson);

        //此时创建okhttpClient 以后每次调用get都会强制调用module的provide方法一次 会根据provide
        //方法的具体实现的不同 可能返回同一个对象  也可能不是同一个对象
        OkHttpClient client = lazyOkHttpClient.get();

        LogUtil.util(TAG,"client:"+client);

    }

    @Override
    public int setLayoutId() {
        return R.layout.activity_dagger_sub;
    }
}
